package lp2;
// Bernard lenin costa da silva


import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * Classe Playlista
 * @author bernard
 *
 */
public class Playlista  implements Serializable{
	private String nomePlayLista;
	private static final long serialVersionUID = 1L;
	
	private List<Musica> playLista;
	
	/**
	 * Construtor da classe Playlista
	 * @param nomePlaylista
	 * @throws Exception
	 */
	public Playlista(String nomePlaylista)throws Exception,NullPointerException{
		if(nomePlaylista.equals("")){
			throw new Exception("Parametro invalido");
		}
		if(nomePlaylista.equals(null)){
			throw new NullPointerException("Parametro invalido");
		}
		this.nomePlayLista = nomePlaylista;
		playLista = new ArrayList<Musica>();
		
	}
	/**
	 * Metodo addMusica
	 * responsavel por adiciona um objeto do tipo Musica na playlista
	 * @param musica
	 */
	
	public void  addMusica(Musica musica){
		playLista.add(musica);
		
	}
	/**
	 * Metodo removerMusica
	 * metodo responsavel por remover musicas na playlista
	 * @param nomeMusica
	 * @param artista
	 * @throws Exception
	 */
	public void removerMusica(String nomeMusica,String artista)throws Exception{
		
		if(nomeMusica.equals("") || artista.equals("")){
			throw new Exception("Parametro invalido.");
		}

		for(Musica musica: playLista){
			if ( musica.getTitulo().equals(nomeMusica) && musica.getNomeArtista().equals(artista)){
				playLista.remove(musica);
				System.out.println("musica removida com sucesso.");
				
			}
			
		}
	}
	
	public boolean verificarRemocaoMusica(String nomeMusica, String artista) throws Exception{
		if(nomeMusica.equals("") || artista.equals("")){
			throw new Exception("Parametro invalido.");
		}
		for(Musica musica:playLista){
			if ( musica.getTitulo().equals(nomeMusica) && musica.getNomeArtista().equals(artista)){
				return true;
			}
		}
		return false;
	}
	
	/**
	 * Metodo nomeDaPlaylista
	 * reponsavel por  retronar o nome da playlista
	 * @return nomePlaylista
	 */
	public String nomeDaPlaylista() {
		return nomePlayLista;
		
	}
	/**
	 * Metodo tocarPlayLista
	 * reposnavel por inicializar toda a playlista
	 * @param playLista
	 */
	public void tocarPlayLista(String playLista){
		System.out.println("Playlista reproduzida");
	}
	
	/**
	 * Metodo pesquisarMusicaGenero
	 * resposanvel por lista as musicas de mesmo genero
	 * @param genero
	 * @throws Exception
	 */
	public void pesquisarMusicaGenero(String genero)throws Exception{
		if (genero.equals("")){
			throw new Exception("Parametro invalido");
		}
		if (genero.equals(null)){
			throw new Exception("Parametro invalido");
		}	
		
		for(Musica musica:playLista){
			if ( musica.getGenero().equals(genero) ){
				System.out.println(musica.getTitulo()+" : "+ musica.getNomeArtista());
			}
			
		}
		
	}
	/**
	 * Metodo verificarMusicaGenero
	 * metodo que recebe o nome de um genero de musica e fas a pesquisa retornando um boolean
	 * @param artista
	 * @return
	 * @throws Exception
	 */
	public boolean verificarMusicaGenero(String genero) throws Exception{
		if (genero.equals("")){
			throw new Exception("Parametro invalido");
		}
		if (genero.equals(null)){
			throw new Exception("Parametro invalido");
		}	
		
		for(Musica musica:playLista){
			if ( musica.getGenero().equals(genero) ){
				return true;
			}
		}
		return false;
		
	}
	
	/**
	 * Metodo pesquisarMusicaArtista
	 * responsavel por lista as musicas de um mesmo artista
	 * @param artista
	 * @throws Exception
	 */
	public void pesquisarMusicaArtista(String artista)throws Exception{
		if (artista.equals("")){
			throw new Exception("Parametro invalido");
		}
		if (artista.equals(null)){
			throw new Exception("Parametro invalido");
		}	
		
		for(Musica musica:playLista){
			if ( musica.getNomeArtista().equals(artista) ){
				System.out.println(musica.getTitulo());
			}
		}
	}
	/**
	 * Metodo verificarMusicaArtista
	 * metodo que recebe o nome de um artista e fas a pesquisa retornando um boolean
	 * @param artista
	 * @return
	 * @throws Exception
	 */
	public boolean verificarMusicaArtista(String artista) throws Exception{
		if (artista.equals("")){
			throw new Exception("Parametro invalido");
		}
		if (artista.equals(null)){
			throw new Exception("Parametro invalido");
		}	
		
		for(Musica musica:playLista){
			if ( musica.getNomeArtista().equals(artista) ){
				return true;
			}
		}
		return false;
		
	}
	/**
	 * Metodo verificarMusica
	 * metodo que recebe o nome de uma musica e fas a pesquisa retornando um boolean
	 * @param nomeDaMusica
	 * @return
	 * @throws Exception
	 */
	public void pesquisarMusica(String nomeDaMusica) throws Exception{
		if (nomeDaMusica.equals("")){
			throw new Exception("Parametro invalido");
		}
		if (nomeDaMusica.equals(null)){
			throw new Exception("Parametro invalido");
		}	
		
		for(Musica musica:playLista){
			if ( musica.getTitulo().equals(nomeDaMusica) ){
				System.out.println(musica.getTitulo()+" : "+ musica.getNomeArtista());
			}
		}
		
		
	}
	
	@Override
	public String toString(){
		for(Musica musica:playLista){
			System.out.println(musica.toString());
			}
		return "";
		
		
	}
}
